home *** CD-ROM | disk | FTP | other *** search
- Unit FadeUnit; { called FadeUnit.Pas }
-
- { This unit does fading for text/graph modes }
-
- interface
-
- procedure InitCol; { gets the current palette and saves it }
- procedure FadeOut(Duration : byte); { lowers/increases the brightness, }
- procedure FadeIn(Duration : byte); { duration determines the time it takes}
- procedure SetBrightness(Brightness : byte); { sets the brightness to brightnes}
-
- implementation
-
- uses Crt; { use Delay procedure from there }
-
- const
- PelIdxR = $3C7; { Port to read from }
- PelIdxW = $3C8; { Port to write to }
- PelData = $3C9; { Dataport }
- Maxreg = 63; { Set to 255 for graphmode }
- MaxInten = 63;
-
- type
- TRGB = record R, G, B : byte end;
-
- var
- Col : array[0..MaxReg] of TRGB;
- I : byte;
-
- Procedure GetCol(ColNr : byte; var R, G, B : byte); assembler;
- Asm
- MOV DX,PelIdxR
- MOV AL,ColNr
- OUT DX,AL
- MOV DX,PelData
- LES SI,R
- IN AL,DX
- MOV BYTE PTR [ES:SI],AL
- LES SI,G
- IN AL,DX
- MOV BYTE PTR [ES:SI],AL
- LES SI,B
- IN AL,DX
- MOV BYTE PTR [ES:SI],AL
- End; { GetCol }
-
- Procedure SetCol(ColNr, R, G, B : byte); assembler; { Change just one color }
- Asm
- MOV DX,PelIdxW
- MOV AL,ColNr
- OUT DX,AL
- MOV DX,PelData
- MOV AL,R
- OUT DX,AL
- MOV AL,G
- OUT DX,AL
- MOV AL,B
- OUT DX,AL
- End; { SetCol }
-
- Procedure InitCol; { Save initial palette }
- Begin
- for I := 0 to MaxReg do GetCol(I, Col[I].R, Col[I].G, Col[I].B)
- End; { InitCol }
-
- Procedure SetBrightness;
- Begin
- for I := 0 to MaxReg do
- SetCol(I,
- Col[I].R * Brightness div MaxInten,
- Col[I].G * Brightness div MaxInten,
- Col[I].B * Brightness div MaxInten)
- End; { SetBrightness }
-
- Procedure FadeOut;
- var I : byte;
- Begin
- for I := MaxInten downto 0 do
- begin
- SetBrightness(I);
- Delay(Duration)
- end
- End; { FadeOut }
-
- Procedure FadeIn;
- var I : byte;
- Begin
- for I := 0 to MaxInten do
- begin
- SetBrightness(I);
- Delay(Duration)
- end
- End; { FadeIn }
-
- End. { FADEUNIT.PAS }